#include"server.hpp"
#include<memory>
#include<fstream>
#include<unordered_map>
#include<signal.h>



using namespace Server;




static void Usage(string proc)
{  cout<<"\nUsage:\n\t"<<proc<<" local_port\n\n";//类已经定义了ip因此只需要定义端口号

}

void handlermessage(int sockfd,string clientip,uint16_t clientport,string message)//收到客户端消息回复客户端
{     string response_message=message;
      response_message+="[server echo]";
      
      struct sockaddr_in client;
      memset(&client,0,sizeof(client));
      client.sin_family=AF_INET;
      client.sin_port=htons(clientport);
      client.sin_addr.s_addr=inet_addr(clientip.c_str());
      sendto(sockfd,response_message.c_str(),response_message.size(),0,(struct sockaddr*)&client,sizeof(client));
   



}
//回调方法，功能：做用户管理，需要一个封装好的用户管理的类定义的对象，添加客户ip和端口号，判断用户在线，就进行消息转发（路由），没有在线，服务端就给客户端发个消息
//服务器进程要知道 ip port
int main(int argc,char *argv[])
{  
    if(argc!=2)
    {
        Usage(argv[0]);
        exit(USAGE_ERR);
    }
    uint16_t port=atoi(argv[1]);//获取外部输入的端口号
   // signal(2,reload);//信号替换
    //initDict();
    //debugPrint();
    unique_ptr<udpServer> usvr(new udpServer(handlermessage,port));
    usvr->initServer();//创建
    usvr->start();//接收


}
